package Funciones;

import beans.Nodo;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import beans.Pareja;
import com.sun.xml.bind.unmarshaller.UnreportedException;
import java.io.IOException;
import java.util.Set;
import javax.servlet.jsp.JspWriter;

/**
 *
 * @author Jose
 */
public class Funciones {

    public static void dibujarArbol(Nodo actual, JspWriter out, int desplazamientoEntreHijos, int ladoCuadro, int desplazamientoAbajo, int grosorLinea) {
        Pareja padres = actual.getPadres();
        String nombreMadre = "Añadir Madre";
        String nombrePadre = "Añadir Padre";
        Nodo padre = null;
        Nodo madre = null;
        Set hijos = null;
        long idPadre = 0;
        long idMadre = 0;
        long idHijo = 0;
        int nHijos = 0;
        boolean anadirMadre = true;
        boolean anadirPadre = true;
        int desplazamientoPadre;
        int desplazamiento = desplazamientoEntreHijos;
        int ladoCuadrado = ladoCuadro;//El tamaño de un lado del cuadro de los nodos
        if (padres != null) {

            padre = padres.getComponente1();
            if (padre != null) {
                nombrePadre = padre.getNombre() + "<br>" + padre.getApellidos();
                idPadre = padre.getIdNodo();
                anadirPadre = false;
            }


            madre = padres.getComponente2();
            if (madre != null) {
                nombreMadre = madre.getNombre() + "<br>" + madre.getApellidos();
                idMadre = madre.getIdNodo();
                anadirMadre = false;
            }


            hijos = padres.getHijos();
            if (hijos != null) {
                nHijos = hijos.size();
            }



        }

        String estiloDiv1 = "style=\"left:derechapx;position:absolute;top:arribapx\"";
        String estiloDiv2;
        String estiloLineaHorizontal = "style=\"left:derechapx;position:absolute;top:arribapx;width:anchurapx\"";
        String estiloLineaHorizontal2;
        String estiloLineaVertical = "style=\"left:derechapx;position:absolute;top:arribapx;height:alturapx\"";
        String estiloLineaVertical2;
        if (nHijos % 2 == 0) {
            desplazamientoPadre = (nHijos / 2) * desplazamiento;
        } else {
            desplazamientoPadre = (nHijos / 2) * desplazamiento + desplazamiento / 2;
        }




        //Cuadro Padre
        int derechaPadre = desplazamientoPadre;
        int arribaPadre = desplazamientoAbajo;

        estiloDiv2 = estiloDiv1.replace("derecha", String.valueOf(derechaPadre));
        estiloDiv2 = estiloDiv2.replace("arriba", String.valueOf(arribaPadre));
        if (anadirPadre == true) {
            try {
                out.write("<a style=\"cursor:pointer\" onclick=\"realizarAccion('anadirPadre')\"><div class=\"cuadroArbol\"" + estiloDiv2 + ">" + nombrePadre + "</div></a>");
            } catch (IOException e) {
            }
        } else {
            try {
                out.write("<a style=\"cursor:pointer\" onclick=\"realizarAccion('enlace" + String.valueOf(idPadre) + "')\"><div class=\"cuadroArbol\"" + estiloDiv2 + ">" + nombrePadre + "</div></a>");
            } catch (IOException e) {
            }
        }
        //Cuadro Madre
        int derechaMadre = derechaPadre + desplazamiento;
        int arribaMadre = arribaPadre;
        estiloDiv2 = estiloDiv1.replace("derecha", String.valueOf(derechaMadre));
        estiloDiv2 = estiloDiv2.replace("arriba", String.valueOf(arribaMadre));
        if (anadirMadre==true) {
            try {
                out.write("<a style=\"cursor:pointer\" onclick=\"realizarAccion('anadirMadre')\"><div class=\"cuadroArbol\"" + estiloDiv2 + ">" + nombreMadre + "</div></a>");
            } catch (IOException e) {
            }
        } else {
            try {
                out.write("<a style=\"cursor:pointer\" onclick=\"realizarAccion('enlace" + String.valueOf(idMadre) + "')\"><div class=\"cuadroArbol\" " + estiloDiv2 + ">" + nombreMadre + "</div></a>");
            } catch (IOException e) {
            }
        }
        //Linea Horizontal que une al padre y la madre
        int arribaUnionPadreMadre = arribaPadre + ladoCuadrado / 2 - grosorLinea / 2;
        int derechaUnionPadreMadre = derechaPadre + ladoCuadrado;
        int anchuraUnionPadreMadre = desplazamiento - ladoCuadrado;
        estiloLineaHorizontal2 = estiloLineaHorizontal.replace("anchura", String.valueOf(anchuraUnionPadreMadre));
        estiloLineaHorizontal2 = estiloLineaHorizontal2.replace("derecha", String.valueOf(derechaUnionPadreMadre));
        estiloLineaHorizontal2 = estiloLineaHorizontal2.replace("arriba", String.valueOf(arribaUnionPadreMadre));
        try {
            out.write("<div class=\"lineaHorizontal\"" + estiloLineaHorizontal2 + "></div>");
        } catch (IOException e) {
        }

        //Linea Vertical que va  a la barra horizontal de donde cuelgan los hijos
        int alturaVerticalCentral = 100;
        int derechaVerticalCentral = derechaPadre + ladoCuadrado + anchuraUnionPadreMadre / 2 - grosorLinea / 2;
        //int derechaVerticalCentral = desplazamientoPadre + ladoCuadrado + (((desplazamiento - ladoCuadrado) / 2) - grosorLinea/2);
        int arribaVerticalCentral = arribaUnionPadreMadre + grosorLinea;
        estiloLineaVertical2 = estiloLineaVertical.replace("arriba", String.valueOf(arribaVerticalCentral));
        estiloLineaVertical2 = estiloLineaVertical2.replace("altura", String.valueOf(alturaVerticalCentral));
        estiloLineaVertical2 = estiloLineaVertical2.replace("derecha", String.valueOf(derechaVerticalCentral));
        try {
            out.write("<div class=\"lineaVertical\"" + estiloLineaVertical2 + "></div>");
        } catch (IOException e) {
        }

        //Linea Horizontal de donde cuelgan los hijos
        int anchuraBarraCentral = desplazamiento * nHijos - desplazamiento + grosorLinea;
        int derechaBarraCentral = derechaVerticalCentral - ((anchuraBarraCentral - grosorLinea) / 2);
        //int derechaBarraCentral =desplazamiento + ladoCuadrado/2;
        int arribaBarraCentral = arribaVerticalCentral + alturaVerticalCentral;

        estiloLineaHorizontal2 = estiloLineaHorizontal.replace("anchura", String.valueOf(anchuraBarraCentral));
        estiloLineaHorizontal2 = estiloLineaHorizontal2.replace("derecha", String.valueOf(derechaBarraCentral));
        estiloLineaHorizontal2 = estiloLineaHorizontal2.replace("arriba", String.valueOf(arribaBarraCentral));
        try {
            out.write("<div class=\"lineaHorizontal\"" + estiloLineaHorizontal2 + "></div>");
        } catch (IOException e) {
        }



        int cont = 0;
        if (hijos != null) {
            for (Object o : hijos) {
                String nombreHijo = ((Nodo) o).getNombre() + "<br>" + ((Nodo) o).getApellidos();

                if (((Nodo) o).getIdNodo() == actual.getIdNodo()) {

                    idHijo = actual.getIdNodo();
                    int derechaVerticalHijo = derechaBarraCentral + cont * desplazamiento;
                    //int derechaVerticalHijo = desplazamiento * cont + ladoCuadrado/2 - grosorLinea/2;
                    int arribaVerticalHijo = arribaBarraCentral + grosorLinea;
                    int alturaVerticalHijo = 200;
                    estiloLineaVertical2 = estiloLineaVertical.replace("arriba", String.valueOf(arribaVerticalHijo));
                    estiloLineaVertical2 = estiloLineaVertical2.replace("altura", String.valueOf(alturaVerticalHijo));
                    estiloLineaVertical2 = estiloLineaVertical2.replace("derecha", String.valueOf(derechaVerticalHijo));
                    try {
                        out.write("<div class=\"lineaVertical\"" + estiloLineaVertical2 + "></div>");
                    } catch (IOException e) {
                    }

                    int derechaNodoActual = derechaVerticalHijo - ladoCuadrado / 2 + grosorLinea / 2;
                    //int derechaNodoActual = desplazamiento * cont;
                    int arribaNodoActual = arribaVerticalHijo + alturaVerticalHijo;
                    estiloDiv2 = estiloDiv1.replace("derecha", String.valueOf(derechaNodoActual));
                    estiloDiv2 = estiloDiv2.replace("arriba", String.valueOf(arribaNodoActual));
                    try {
                        out.write("<a style=\"cursor:pointer\" onclick=\"realizarAccion('enlace" + String.valueOf(idHijo) + "')\"><div class=\"cuadroArbol\" " + estiloDiv2 + ">" + nombreHijo + "</div></a>");
                    } catch (IOException e) {
                    }
                    Funciones.dibujarParejasEHijos(actual, derechaNodoActual, arribaNodoActual, desplazamiento, out, ladoCuadrado, grosorLinea);

                } else {
                    idHijo = ((Nodo) o).getIdNodo();
                    int derechaVerticalHijo = derechaBarraCentral + cont * desplazamiento;
                    //int derechaVerticalHijo = desplazamiento * cont + ladoCuadrado/2 - grosorLinea/2;
                    int arribaVerticalHijo = arribaBarraCentral + grosorLinea;
                    int alturaVerticalHijo = 100;
                    estiloLineaVertical2 = estiloLineaVertical.replace("arriba", String.valueOf(arribaVerticalHijo));
                    estiloLineaVertical2 = estiloLineaVertical2.replace("altura", String.valueOf(alturaVerticalHijo));
                    estiloLineaVertical2 = estiloLineaVertical2.replace("derecha", String.valueOf(derechaVerticalHijo));
                    try {
                        out.write("<div class=\"lineaVertical\"" + estiloLineaVertical2 + "></div>");
                    } catch (IOException e) {
                    }
                    int derechaNodo = derechaVerticalHijo - ladoCuadrado / 2 + grosorLinea / 2;
                    // int derechaNodo = desplazamiento * cont;
                    int arribaNodo = arribaVerticalHijo + alturaVerticalHijo;
                    estiloDiv2 = estiloDiv1.replace("derecha", String.valueOf(derechaNodo));
                    estiloDiv2 = estiloDiv2.replace("arriba", String.valueOf(arribaNodo));
                    try {
                        out.write("<a style=\"cursor:pointer\" onclick=\"realizarAccion('enlace" + String.valueOf(idHijo) + "')\"><div class=\"cuadroArbol\" " + estiloDiv2 + ">" + nombreHijo + "</div></a>");
                    } catch (IOException e) {
                    }


                }
                cont++;
            }
        } else {
            int derechaNodoActual = derechaVerticalCentral - ladoCuadrado / 2 + grosorLinea / 2;
            int arribaNodoActual = arribaVerticalCentral + alturaVerticalCentral;
            String nombreHijo = ((Nodo) actual).getNombre() + "<br>" + ((Nodo) actual).getApellidos();
            idHijo = ((Nodo) actual).getIdNodo();
            estiloDiv2 = estiloDiv1.replace("derecha", String.valueOf(derechaNodoActual));
            estiloDiv2 = estiloDiv2.replace("arriba", String.valueOf(arribaNodoActual));
            try {
                out.write("<a style=\"cursor:pointer\" onclick=\"realizarAccion('enlace" + String.valueOf(idHijo) + "')\"><div class=\"cuadroArbol\" " + estiloDiv2 + ">" + nombreHijo + "</div></a>");
            } catch (IOException e) {
            }
            Funciones.dibujarParejasEHijos(actual, derechaNodoActual, arribaNodoActual, desplazamiento, out, ladoCuadrado, grosorLinea);

        }
    }

    public static void dibujarParejasEHijos(Nodo nodo, int despLateral, int despVertical, int desplazamiento, JspWriter out, int ladoCuadrado, int grosorLinea) {

        Set parejas = nodo.getParejas();
        if (parejas != null) {
            int contParejas = 0;
            int nHijosAcumulados = 0;
            int derechaAcumulada = despLateral + ladoCuadrado;
            for (Object p : parejas) {
               //nHijosAcumulados = dibujarParejaEHijos((Pareja) p, nodo, despLateral, despVertical, desplazamiento, contParejas, out, nHijosAcumulados, ladoCuadrado, grosorLinea);
                derechaAcumulada = dibujarParejaEHijos2((Pareja)p,nodo,despLateral,despVertical,desplazamiento,out,ladoCuadrado,grosorLinea,contParejas,derechaAcumulada);
                contParejas++;
            }
        }

    }
    
    public static int dibujarParejaEHijos2(Pareja p,Nodo nodo,int derecha,int arriba,int desplazamiento,JspWriter out,int ladoCuadrado,int grosorLinea,int contParejas,int derechaAcumulada)
    {
        String estiloDiv1 = "style=\"left:derechapx;position:absolute;top:arribapx\"";
        String estiloDiv2;
        String estiloLineaHorizontal = "style=\"left:derechapx;position:absolute;top:arribapx;width:anchurapx\"";
        String estiloLineaHorizontal2;
        String estiloLineaVertical = "style=\"left:derechapx;position:absolute;top:arribapx;height:alturapx\"";
        String estiloLineaVertical2;
         Nodo otroNodo = p.getComponente1();
        if (p.getComponente1().getIdNodo() == nodo.getIdNodo()) {
            otroNodo = p.getComponente2();
        }
        String nombrePareja = otroNodo.getNombre() + " " + otroNodo.getApellidos();
        long idNodoPareja = otroNodo.getIdNodo();
        Set hijos = p.getHijos();
        int nHijos = hijos.size();
        
        
        //Dibujo de las linea de union con las parejas y de las parejas
        //int anchuraLineaPareja = (desplazamiento-ladoCuadrado)+ ladoCuadrado*nHijos;
        int anchuraLineaPareja = desplazamiento*nHijos;
        if(nHijos == 0)
            anchuraLineaPareja = desplazamiento;
        int arribaLineaPareja = arriba + ladoCuadrado/2- grosorLinea/2;
        int derechaLineaPareja = derechaAcumulada;
        
        int arribaPareja = arriba;
        int derechaPareja = derechaLineaPareja+anchuraLineaPareja; 
        
        estiloDiv2 = estiloDiv1.replace("derecha", String.valueOf(derechaPareja));
        estiloDiv2 = estiloDiv2.replace("arriba", String.valueOf(arribaPareja));
        try {
            out.write("<a style=\"cursor:pointer\" onclick=\"realizarAccion('enlace" + String.valueOf(idNodoPareja) + "')\"><div class=\"cuadroArbol\" " + estiloDiv2 + ">" + nombrePareja + "</div></a>");
        } catch (IOException e) {
        }
        
        estiloLineaHorizontal2 = estiloLineaHorizontal.replace("anchura", String.valueOf(anchuraLineaPareja));
        estiloLineaHorizontal2 = estiloLineaHorizontal2.replace("derecha", String.valueOf(derechaLineaPareja));
        estiloLineaHorizontal2 = estiloLineaHorizontal2.replace("arriba", String.valueOf(arribaLineaPareja));
        try {
            out.write("<div class=\"lineaHorizontal\"" + estiloLineaHorizontal2 + "></div>");
        } catch (IOException e) {
        }
        
        
        
        if(nHijos>0)
        {
            //Dibujo de la linea vertical de donde cuelgan los hijos de cada pareja
            int derechaVerticalHijos = derechaLineaPareja + anchuraLineaPareja/2-grosorLinea/2;
            int arribaVerticalHijos = arribaLineaPareja+grosorLinea;
            int alturaVerticalHijos = 100;
            estiloLineaVertical2 = estiloLineaVertical.replace("arriba", String.valueOf(arribaVerticalHijos));
            estiloLineaVertical2 = estiloLineaVertical2.replace("altura", String.valueOf(alturaVerticalHijos));
            estiloLineaVertical2 = estiloLineaVertical2.replace("derecha", String.valueOf(derechaVerticalHijos));
            try {
                 out.write("<div class=\"lineaVertical\"" + estiloLineaVertical2 + "></div>");
             } catch (IOException e) {
            }
        
        
            //Dibujo de la linea Horizontal de donde cuelgan los hijos de cada pareja
            int anchuraHorizontalHijos = desplazamiento*(nHijos-1)+ ladoCuadrado-ladoCuadrado/2-ladoCuadrado/2+grosorLinea;
            int derechaHorizontalHijos = derechaVerticalHijos+grosorLinea/2-anchuraHorizontalHijos/2;
            int arribaHorizontalHijos = arribaVerticalHijos+alturaVerticalHijos;
            estiloLineaHorizontal2 = estiloLineaHorizontal.replace("anchura", String.valueOf(anchuraHorizontalHijos));
            estiloLineaHorizontal2 = estiloLineaHorizontal2.replace("derecha", String.valueOf(derechaHorizontalHijos));
            estiloLineaHorizontal2 = estiloLineaHorizontal2.replace("arriba", String.valueOf(arribaHorizontalHijos));
            try {
                 out.write("<div class=\"lineaHorizontal\"" + estiloLineaHorizontal2 + "></div>");
             } catch (IOException e) {
             }
            
            int cont = 0;
            for(Object h : hijos)
            {
                int derechaRama =0;
                int alturaRama =100;
                int arribaRama = arribaHorizontalHijos+grosorLinea;
                int derechaHijo=0;
                int arribaHijo=arribaHorizontalHijos+grosorLinea;
                if(nHijos==1)
                {
                    derechaRama = derechaVerticalHijos;
                    arribaRama = arribaHorizontalHijos;
                    alturaRama= 100+grosorLinea;
                }
                else
                {
                    derechaRama = derechaHorizontalHijos + desplazamiento*cont;
                }
            
                estiloLineaVertical2 = estiloLineaVertical.replace("arriba", String.valueOf(arribaRama));
                estiloLineaVertical2 = estiloLineaVertical2.replace("altura", String.valueOf(alturaRama));
                estiloLineaVertical2 = estiloLineaVertical2.replace("derecha", String.valueOf(derechaRama));
                try {
                 out.write("<div class=\"lineaVertical\"" + estiloLineaVertical2 + "></div>");
                } catch (IOException e) {
                }
                
                derechaHijo = derechaRama+grosorLinea/2-ladoCuadrado/2;
                arribaHijo = arribaRama+alturaRama;
                String nombreHijo = ((Nodo) h).getNombre() + "<br>" + ((Nodo) h).getApellidos();
                long idHijo = ((Nodo) h).getIdNodo();
                estiloDiv2 = estiloDiv1.replace("derecha", String.valueOf(derechaHijo));
                estiloDiv2 = estiloDiv2.replace("arriba", String.valueOf(arribaHijo));
                 try {
                    out.write("<a style=\"cursor:pointer\" onclick=\"realizarAccion('enlace" + String.valueOf(idHijo) + "')\"><div class=\"cuadroArbol\" " + estiloDiv2 + ">" + nombreHijo + "</div></a>");
                 } catch (IOException e) {
               }

            cont++;
           }
        }
        else{}
        
        return(derechaPareja+ladoCuadrado);
    }

    public static int dibujarParejaEHijos(Pareja p, Nodo nodo, int despLateral, int despVertical, int desplazamiento, int contParejas, JspWriter out, int hijosAcumulados, int ladoCuadrado, int grosorLinea) {
        String estiloDiv1 = "style=\"left:derechapx;position:absolute;top:arribapx\"";
        String estiloDiv2;
        String estiloLineaHorizontal = "style=\"left:derechapx;position:absolute;top:arribapx;width:anchurapx\"";
        String estiloLineaHorizontal2;
        String estiloLineaVertical = "style=\"left:derechapx;position:absolute;top:arribapx;height:alturapx\"";
        String estiloLineaVertical2;


        Nodo otroNodo = p.getComponente1();
        if (p.getComponente1().getIdNodo() == nodo.getIdNodo()) {
            otroNodo = p.getComponente2();
        }
        String nombrePareja = otroNodo.getNombre() + " " + otroNodo.getApellidos();
        long idNodoPareja = otroNodo.getIdNodo();
        Set hijos = p.getHijos();
        int nHijos = hijos.size();

        

        //Dibujo de la pareja
        int derechaPareja = despLateral + desplazamiento * (contParejas + 1) + (nHijos * ladoCuadrado) + (hijosAcumulados * ladoCuadrado);
        int arribaPareja = despVertical;
        estiloDiv2 = estiloDiv1.replace("derecha", String.valueOf(derechaPareja));
        estiloDiv2 = estiloDiv2.replace("arriba", String.valueOf(arribaPareja));
        try {
            out.write("<a style=\"cursor:pointer\" onclick=\"realizarAccion('enlace" + String.valueOf(idNodoPareja) + "')\"><div class=\"cuadroArbol\" " + estiloDiv2 + ">" + nombrePareja + "</div></a>");
        } catch (IOException e) {
        }

        //Dibujo de la linea q une al nodo con su pareja
        int anchuraLineaUnionPareja = desplazamiento - ladoCuadrado + (nHijos * ladoCuadrado) + (hijosAcumulados * ladoCuadrado);
        //int derechaLineaUnionPareja = despLateral + ladoCuadrado * (contParejas + 1) + contParejas * (desplazamiento - ladoCuadrado);
        int derechaLineaUnionPareja = derechaPareja-anchuraLineaUnionPareja;
        int arribaLineaUnionPareja = despVertical + ladoCuadrado / 2;
        if (contParejas > 0) {
            derechaLineaUnionPareja = derechaLineaUnionPareja + ladoCuadrado;
        }
        estiloLineaHorizontal2 = estiloLineaHorizontal.replace("anchura", String.valueOf(anchuraLineaUnionPareja));
        estiloLineaHorizontal2 = estiloLineaHorizontal2.replace("derecha", String.valueOf(derechaLineaUnionPareja));
        estiloLineaHorizontal2 = estiloLineaHorizontal2.replace("arriba", String.valueOf(arribaLineaUnionPareja));
        try {
            out.write("<div class=\"lineaHorizontal\"" + estiloLineaHorizontal2 + "></div>");
        } catch (IOException e) {
        }
        
        
        //Dibujo de la barra vertical central que va a la barra horizontal de donde cuelgan los hijos
        int alturaVerticalCentral = 100;
        int derechaVerticalCentral = derechaLineaUnionPareja + (anchuraLineaUnionPareja / 2) - grosorLinea / 2;
        int arribaVerticalCentral = arribaLineaUnionPareja + grosorLinea;
        estiloLineaVertical2 = estiloLineaVertical.replace("arriba", String.valueOf(arribaVerticalCentral));
        estiloLineaVertical2 = estiloLineaVertical2.replace("altura", String.valueOf(alturaVerticalCentral));
        estiloLineaVertical2 = estiloLineaVertical2.replace("derecha", String.valueOf(derechaVerticalCentral));
        try {
            out.write("<div class=\"lineaVertical\"" + estiloLineaVertical2 + "></div>");
        } catch (IOException e) {
        }


        //dibujar la barra horizontal de donde cuelgan los hijos
        int anchuraBarraCentral = desplazamiento * nHijos - desplazamiento;
        int derechaBarraCentral = derechaVerticalCentral - anchuraBarraCentral / 2;
        if(derechaBarraCentral < 0)
            derechaBarraCentral = ladoCuadrado;
        int arribaBarraCentral = arribaVerticalCentral + alturaVerticalCentral;
        
        estiloLineaHorizontal2 = estiloLineaHorizontal.replace("anchura", String.valueOf(anchuraBarraCentral));
        estiloLineaHorizontal2 = estiloLineaHorizontal2.replace("derecha", String.valueOf(derechaBarraCentral));
        estiloLineaHorizontal2 = estiloLineaHorizontal2.replace("arriba", String.valueOf(arribaBarraCentral));
        try {
            out.write("<div class=\"lineaHorizontal\"" + estiloLineaHorizontal2 + "></div>");
        } catch (IOException e) {
        }

        int cont = 0;
        int incremento = anchuraBarraCentral/(nHijos+1);
        for (Object h : hijos) {


            int derechaVerticalHijo = derechaBarraCentral + cont * incremento;
            int arribaVerticalHijo = arribaBarraCentral;
            int alturaVerticalHijo = 100;

            estiloLineaVertical2 = estiloLineaVertical.replace("arriba", String.valueOf(arribaVerticalHijo));
            estiloLineaVertical2 = estiloLineaVertical2.replace("altura", String.valueOf(alturaVerticalHijo));
            estiloLineaVertical2 = estiloLineaVertical2.replace("derecha", String.valueOf(derechaVerticalHijo));
            try {
                out.write("<div class=\"lineaVertical\"" + estiloLineaVertical2 + "></div>");
            } catch (IOException e) {
            }

            int derechaHijo = derechaVerticalHijo - ladoCuadrado / 2 + grosorLinea / 2;
            int arribaHijo = arribaVerticalHijo + alturaVerticalHijo;


            String nombreHijo = ((Nodo) h).getNombre() + "<br>" + ((Nodo) h).getApellidos();
            long idHijo = ((Nodo) h).getIdNodo();
            estiloDiv2 = estiloDiv1.replace("derecha", String.valueOf(derechaHijo));
            estiloDiv2 = estiloDiv2.replace("arriba", String.valueOf(arribaHijo));
            try {
                out.write("<a style=\"cursor:pointer\" onclick=\"realizarAccion('enlace" + String.valueOf(idHijo) + "')\"><div class=\"cuadroArbol\" " + estiloDiv2 + ">" + nombreHijo + "</div></a>");
            } catch (IOException e) {
            }

            cont++;
        }

        return (hijosAcumulados + nHijos);
    }
}
